﻿using System;
using System.Collections.Generic;
using System.Linq;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Audio;
using Microsoft.Xna.Framework.Content;
using Microsoft.Xna.Framework.GamerServices;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Input;
using Microsoft.Xna.Framework.Media;
using Microsoft.Xna.Framework.Net;
using Microsoft.Xna.Framework.Storage;

namespace iMario
{
    public abstract class GameEntity
    {
        //Mục tiêu của abstract class GameEntity
        //  - Tập trung các hàm ảo có tính chung của các lớp bên dưới và đưa lên lớp GameEntity để tiện quản lí và mở rộng (nếu cần)


        //Danh sách các thuộc tính dùng chung và ý nghĩa


        //Danh sách các phương thức và ý nghĩa
        //Hàm nhân bản thêm 1 đối tượng thuộc lớp đối tượng đó và trả lời đối tượng đã nhân bản thành công
        //  1. Tham số truyền vào: Không có
        //  2. Giá trị trả về: Không có
        virtual public GameEntity Clone()
        {
            return null;
        }
        
        //Hàm cập nhật trạng thái của đối tượng
        //  1. Tham số truyền vào:
        //      - KeyboardState _keyboard: Đại diện cho trạng thái của Keyboard
        //      - MouseState _mouse: Đại diện cho trạng thái của Mouse
        //      - GameTime _gameTime: biến đếm thời gian của game
        //  2. Giá trị trả về: Không có
        virtual public void Update(KeyboardState _keyboard, MouseState _mouse, GameTime _gameTime)
        { 
        }

        //Hàm xử lí các sự kiện vẽ
        //  1. Tham số truyền vào:
        //      - SpriteBatch _spriteBatch
        //      - GameTime _gameTime
        //  2. Giá trị trả về: Không có
        virtual public void Draw(SpriteBatch _spriteBatch, GameTime _gameTime)
        { 
        }
    }
}
